import winston from 'winston'
import 'winston-daily-rotate-file'
import { ipcMain, app } from 'electron'
import { is } from '@electron-toolkit/utils'
import { resolve } from 'path'
// const levels = {
//   error: 0,
//   warn: 1,
//   info: 2,
//   http: 3,
//   verbose: 4,
//   debug: 5,
//   silly: 6
// };

// 定义日志格式，包含时间戳
const logFormat = winston.format.combine(
  is.dev ? winston.format.colorize() : winston.format.simple(), // 日志颜色
  winston.format.align(), // 日志对齐
  winston.format.splat(), // 格式化日志信息
  // winston.format.simple(), // 简单日志格式
  winston.format.json(), // JSON 格式
  winston.format.label({ label: 'app' }), // 日志标签
  winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), // 时间戳格式
  winston.format.printf(({ timestamp, level, message }) => `${timestamp} [${level}]: ` + message)
)

const logDirectory = resolve(app.getPath('userData'), 'logs/')
const logTransport = new winston.transports.DailyRotateFile({
  filename: resolve(logDirectory, 'app-%DATE%.log'),
  datePattern: 'YYYY-MM-DD',
  maxSize: '5m', // 每个日志文件最大5MB
  maxFiles: '7d', // 最多保留7天的日志文件
  format: logFormat // 使用自定义的日志格式
})

// 创建日志记录器
const logger = winston.createLogger({
  level: is.dev ? 'debug' : 'info', // 默认日志级别为 'info'
  transports: [
    logTransport,
    new winston.transports.Console({ format: logFormat }) // 控制台输出
  ]
})

// 重新logger
const logLevel = ['error', 'warn', 'info', 'http', 'verbose', 'debug', 'silly']
const reLogger = {}
logLevel.forEach((key) => {
  const originFun = logger[key]
  reLogger[key] = (...args) => {
    args.map((item) => {
      if (typeof item === 'object') {
        return JSON.stringify(item)
      } else {
        return item
      }
    })
    originFun(args)
  }
})
// 监听渲染进程发送的日志信息
ipcMain.handle('log-info', (_event, message) => {
  if (!is.dev) {
    logger.info(message) // 记录日志
  }
})

ipcMain.handle('log-error', (_event, message) => {
  if (!is.dev) {
    logger.error(message) // 记录错误日志
  }
})

export { logger as log, reLogger }
